package leetcode.day;

import java.util.Random;

/**
 * 1576. 替换所有的问号
 */
public class ModifyString {

    public static void main(String[] args) {


    }

    /**
     * 暴力扫描。 在替换的时候，只需要三个字母就可以找到前后不一样的字母。三个字母任意（使用abc）
     *
     * @param s
     * @return
     */
    public String modifyString(String s) {
        char[] chars = s.toCharArray();
        for (int i = 0; i < s.length(); i++) {
            if (chars[i] == '?') {
                for (char j = 'a'; j <= 'c'; j++) {
                    if ((i > 0 && j == chars[i - 1]) || (i < chars.length - 1 && j == chars[i + 1])) {
                        //说明是重复值 跳过
                        continue;
                    } else {
                        chars[i] = j;
                        break;
                    }
                }
            }
        }
        return String.valueOf(chars);
    }

    /**
     * 根据题意进行模拟，尝试对每个 s[i]s[i] 进行替换，能够替换的前提是 s[i]s[i] 为 ?，
     * 且替换字符与前后字符（若存在）不同，由于只需要确保与前后字符不同，因此必然最多在 33 个字符内找到可替换的值。
     */
    public String modifyString2(String s) {
        char[] chars = s.toCharArray();
        for (int i = 0; i < s.length(); i++) {
            for (char j = 'a'; j <= 'c' && chars[i] == '?'; j++) {
                boolean flag = true;
                if (i > 0 && chars[i - 1] == j) {
                    flag = false;
                }
                if (i < chars.length - 1 && chars[i + 1] == j) {
                    flag = false;
                }
                if (flag){
                    chars[i]=j;
                }
            }
        }
        return String.valueOf(chars);
    }
}
